package cn.iocoder.yudao.module.wine.service.stockstore;

import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.wine.controller.app.stockstore.vo.AppStockStoreListReqVO;
import cn.iocoder.yudao.module.wine.controller.app.stockstore.vo.AppStockStoreSaveReqVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;

import java.util.*;
import cn.iocoder.yudao.module.wine.controller.admin.stockstore.vo.*;
import cn.iocoder.yudao.module.wine.dal.dataobject.stockstore.StockStoreDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.wine.dal.mysql.stockstore.StockStoreMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.wine.enums.ErrorCodeConstants.*;

/**
 * 仓库信息 Service 实现类
 *
 * @author 管理员
 */
@Service
@Validated
public class StockStoreServiceImpl implements StockStoreService {

    @Resource
    private StockStoreMapper stockStoreMapper;

    @Override
    public Long createStockStore(StockStoreSaveReqVO createReqVO) {
        // 插入
        StockStoreDO stockStore = BeanUtils.toBean(createReqVO, StockStoreDO.class);
        stockStoreMapper.insert(stockStore);
        // 返回
        return stockStore.getId();
    }

    @Override
    public void updateStockStore(StockStoreSaveReqVO updateReqVO) {
        // 校验存在
        validateStockStoreExists(updateReqVO.getId());
        // 更新
        StockStoreDO updateObj = BeanUtils.toBean(updateReqVO, StockStoreDO.class);
        stockStoreMapper.updateById(updateObj);
    }

    @Override
    public void deleteStockStore(Long id) {
        // 校验存在
        validateStockStoreExists(id);
        // 删除
        stockStoreMapper.deleteById(id);
    }

    private void validateStockStoreExists(Long id) {
        if (stockStoreMapper.selectById(id) == null) {
            throw exception(INFO_NOT_EXISTS);
        }
    }

    @Override
    public StockStoreDO getStockStore(Long id) {
        return stockStoreMapper.selectById(id);
    }

    @Override
    public PageResult<StockStoreRespVO> getStockStorePage(StockStorePageReqVO pageReqVO) {
        return stockStoreMapper.selectPage(pageReqVO);
    }

    @Override
    public List<StockStoreDO> getStockStoreList(AppStockStoreListReqVO pageReqVO) {
        return stockStoreMapper.getStockStoreList(pageReqVO);
    }

    @Override
    public Long appCreateStockStore(AppStockStoreSaveReqVO createReqVO) {
        createReqVO.setUserId(SecurityFrameworkUtils.getLoginUserId());
        StockStoreDO stockStore = BeanUtils.toBean(createReqVO, StockStoreDO.class);
        stockStoreMapper.insert(stockStore);
        // 返回
        return stockStore.getId();

    }

    @Override
    public Boolean appUpdateStockStore(AppStockStoreSaveReqVO updateReqVO) {
        // 校验存在
        validateStockStoreExists(updateReqVO.getId());
        // 更新
        StockStoreDO updateObj = BeanUtils.toBean(updateReqVO, StockStoreDO.class);
        return stockStoreMapper.updateById(updateObj) > 0;
    }

}
